Release notes
2024r9
Dynamic range and transfer method in video component calls of MAM API
In this version, fields were added to video components to define the dynamic range of a video file.
To support the exchange of these fields with external systems, the dynamicRange and transferMethod attributes have been added to the body of the POST and PUT /videoComponents calls and the response of the GET /videoComponents/{videoComponentId} call. They represent drop-down lists.
An example of the response of the GET /videoComponents call:
{
"videoComponentId": "9501386392",
"mediaAssetId": "9501386390",
"activeFormatDescription": null,
"aspectRatio": "16:9",
"colourModel": null,
"definition": "UHD",
"dynamicRange": "hdr",
"transferMethod": "hlg",
"format": null,
"hasBurntInCaptions": false,
...
}
To retrieve the values of these attributes so they can be used in the POST and PUT calls, the following drop-down calls have been added:
-
GET /dynamicRanges
-
GET /transferMethods
An example of the GET /dynamicRanges call:
[
{
"id": "sdr",
"name": "SDR"
},
{
"id": "hdr",
"name": "HDR"
}
]
The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.
API developers
The following has changed in the YAML:
At line 2429, the drop-down calls have been added.
At line 3219, the dynamicRange and transferMethod properties have been added to the VideoComponent schema.
At line 3592, examples have been added to the MediaAssetSearchResult schema.
For easier viewing, the YAMLs can also be compared here: TextCompare
2024r4
Media calls added to MAM API
Previously, no calls were available in the MAM API to manage or retrieve media.
From this version, the following calls have been added.
GET /media
This call can be used to search for media. It is possible to search using the label attribute as filter parameter, which maps to the Label of the media in WHATS’ON.
An example of the URL: GET /media?filter=between(label,(0000001000,0000001020))
It returns a list of the media that match the parameter and gives a limited number of properties.
An example of the response:
[
{
"label": "0000001000",
"status": null,
"library": "The fiery library",
"type": "MAM File",
"mediaId": "3868450000",
"identification": "0000001000",
"frameRate": "25fps"
},
{
"label": "0000001001",
"status": null,
"library": "The fiery library",
"type": "MAM File",
"mediaId": "3868470000",
"identification": "0000001001",
"frameRate": "25fps"
}
]
GET /medias/{mediaId}
This call can be used to retrieve the details of a single media by providing the external reference in the URL of the call.
An example of the response:
{
"label": "0000000041",
"status": "available",
"library": "The fiery library",
"type": "MAM File",
"networkPath": "/main",
"TCIN": "00:00:00.00",
"TCOUT": "01:30:00.00",
"remarks": null,
"MAMMediaId": "YEUZYEZ76765",
"checksum": "67236IKJDKZ8USD",
"filesize": 350,
"fileFormat": "MPEG-4",
"encoding": "HAC",
"extension": "mp4",
"mediaId": "1111456000",
"identification": "0000000041",
"overallBitRate": 100,
"videoBitRate": 200,
"MAMSystems": [
"System1"
],
"frameRate": "25fps",
"supplier": null,
"department": null,
"isBorrowed": false,
"isLost": false,
"position": null,
"closet": null,
"shelf": null,
"row": null,
"fileCreationDate": null,
"linkedMediaAssets": []
}
See the API explorer for more information on the different attributes.
POST /media?template={id}
This call can be used to create or update media.
It is possible to specify the template parameter with the external reference of a media prototype. If provided, the media will be created using that prototype. The available media prototypes can be retrieved using the GET /mediaTemplates call.
When a media is updated, the mediaId is mandatory in the body.
Label
Same as for media assets, the label provided in the body will be stored in the Identification and Label fields in WHATS'ON. If the media label is a calculated field in WHATS’ON, the label in the body of the call is ignored and the calculation logic is applied.
If an existing media is updated and the label and identification in WHATS'ON are read-only, the label in the body will be ignored.
Read-only attributes
The attributes identification, library, type, label and frameRate become read-only after creation, so if the POST call is used to update and any of those attributes are provided in the request body, they will be ignored.
Type
Each media type has a specific Media kind configured in the MM2MediaType drop-down list. Depending on the kind, the following attributes are read-only and will be ignored:
-
Physical kind:
MAMMediaId,MAMSystems,TCIN,TCOUT,checksum,filesize, andencoding -
Managed kind:
supplier,department,isBorrowed,isLost,position,closet,shelfandrow
Linking media assets
The linkedMediaAssets attribute can be used to link media assets to media or to unlink them.
-
If the media did not have any
linkedMediaAssetsbefore, the media assets sent in the list will be linked to the media. -
If the media already had a
linkedMediaAssetslist, the existing list will be removed and replaced by the new one provided as part of the call.
Only the external reference of existing media assets can be provided or an error message will be returned.
An example of the body:
{
"label": "0000000041",
"status": "ready",
"library": "The fiery library",
"type": "MAM File",
"networkPath": "/main",
"TCIN": "00:00:00.00",
"TCOUT": "01:30:00.00",
"remarks": null,
"MAMMediaId": "RTE54h",
"checksum": "545AZ9A989AE78",
"filesize": 350,
"fileFormat": "MP4",
"encoding": "HAC",
"extension": ".MP4",
"mediaId": "1111456000",
"identification": "0000000041",
"overallBitRate": 100,
"videoBitRate": 200,
"MAMSystems": [
"System1"
],
"frameRate": "25fps",
"supplier": null,
"department": null,
"isBorrowed": false,
"isLost": false,
"position": null,
"closet": null,
"shelf": null,
"row": null,
"fileCreationDate": null,
"linkedMediaAssets": [
"1111453000"
]
}
See the API explorer for more information on the different attributes and how to define them.
PUT /media/{mediaId}
This call can be used to update media.
If a mediaId (i.e. external reference) is sent as part of the body and its value is different from the mediaId in the URL, then the external reference of the media will be updated to the new value sent in the body.
The same conditions for the label, read-only attributes, type and linking media assets apply as those for the POST call.
An example of the body:
{
"mediaId":"000000198",
"status":"ready",
"networkPath":"/main",
"fileFormat":"MPG",
"overallBitRate":"300",
"videoBitRate":"500",
"remarks":"Created by API",
"MAMMediaId":"File675",
"MAMSystems":[
"System1"
],
"TCIN":"00:00:00",
"TCOUT":"00:01:30",
"encoding":"HAC",
"extension":".MP4",
"linkedMediaAssets":[
"000001927"
]
}
See the API explorer for more information on the different attributes and how to configure them.
DELETE /media/{mediaId}
This call deletes the media with the provided mediaId or external reference.
If the media was previously linked to a media asset, the existing link will also be removed.
GET /mediaTemplates
This call returns all the available media prototypes. Note that only media prototypes with an API reference will be returned.
The mediaTemplateId can be used in the template parameter of the POST /media call.
[
{
"mediaTemplateId": "Media",
"name": "Media",
"remarks": null
},
{
"mediaTemplateId": "Media 30FPS",
"name": "Media 30FPS",
"remarks": null
}
]
Drop-down call
-
GET /departments: Get the possible values for thedepartmentattribute, which maps to the PSIDepartment drop-down list.
Permissions
The API user must have the Media Management MM2 permission to be able to manipulate the media:
-
At least Editor access rights for the
POST/PUT/DELETEcalls. -
At least Browser access rights for the
GETcalls.
The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.
API developers
The following was changed to the YAML:
At line 1319, the media path was added with its post and get call.
At line 1400, the /media/{mediaId} path was added with its put, get and delete call.
At line 1494, the /mediaTemplates path was added for the get call.
At line 2140, the /departments path was added for the get call.
At line 2646, more properties were added to the MediaSearchResult schema.
At line 2667, the MediaOfComponent schema was added.
At line 2713, the Media schema was added.
At line 3049, the reference schema of Component was changed from Media to MediaOfComponent.
At line 3305, the $ref: '#/components/schemas/MediaSearchResult' in the ComponentSearchResult was changed to a mediaLabel property.
At line 3323, the MediaTemplateResult schema was added.
At line 3528, the Media tag was added.
For easier viewing, the YAMLs can also be compared here: TextCompare
Content warnings in content API and MAM API
It was already possible to manage parental ratings on content and media assets using the content and MAM API. However, it was not yet possible to manage content warnings, which are also defined per regulator on content and media assets. In compliance configuration, the type and format of the content warnings are defined.
From this version, the contentWarnings array has been added to the ratings attribute of the applicable calls.
GET
The contentWarnings array has been added to the response of the following GET calls:
-
Content API:
-
GET /products/{contentId} -
GET /programs/{contentId} -
GET /series/{contentId} -
GET /seasons/{contentId} -
GET /episodes/{contentId} -
GET /contentCollections/{contentId}
-
-
MAM API:
-
GET /mediaAssets/{mediaAssetId}
-
For each object in the array, it contains the following attributes:
-
id:
The API reference of the content warning item as defined in the WOnRegulatorComplianceConfigurationEntryField drop-down list. -
value:
The value of the content warning. Depending on the type, this will be text, true/false or an array of drop-down values. -
type:
The type of the content warning as defined in the compliance configuration:checkBox,dropDownortext. -
comment:
The comment on the content warning.
An example of the response of the GET /mediaAssets call:
{
"mediaAssetId": "6111521000",
"mediaAssetSequenceId": "6111522000",
"label": "0000001302",
"contentId": "143048527",
"contentTitle": "AVENGERS: ENDGAME",
"ratings": [
{
"regulator": "localRegulator",
"rating": "6",
"reason": null,
"status": null,
"contentWarnings": [
{
"id": "Violence",
"value": true,
"type": "checkBox",
"comment": "Verified"
},
{
"id": "Sensitive categories",
"value": [
"Fear"
],
"type": "dropDown",
"comment": null
},
{
"id": "Language",
"value": "Harsh",
"type": "text",
"comment": null
}
]
}
],
"remarks": null
}
POST and PUT
The contentWarnings array has been added to the body of the following POST and PUT calls:
-
Content API
-
Programs
-
POST /programs -
PUT /programs/{contentId} -
POST /programs/{contentId}/versions/{versionId}
-
-
Series
-
POST /series -
PUT /series/{contentId}
-
-
Seasons
-
POST /seasons -
PUT /seasons/{contentId} -
POST /seasons/{contentId}/versions/{versionId}
-
-
Episodes
-
POST /episodes -
PUT /episodes/{contentId} -
POST /episodes/{contentId}/versions/{versionId}
-
-
Content collections
-
POST /contentCollections -
PUT /contentCollections/{contentId}
-
-
-
MAM API
-
POST /completeMediaAssets -
PUT /completeMediaAssets/{mediaAssetId} -
POST /mediaAssets -
PUT /mediaAssets/{mediaAssetId}
-
For each object in the array, it contains the following attributes:
-
id:-
This is mandatory and maps to the API reference of the content warning item as defined in the WOnRegulatorComplianceConfigurationEntryField drop-down list.
-
It should be unique per regulator. If the call contains duplicated content warnings for the same regulator, it will fail with the following error:
{ "statusCode": "422", "message": "Operation cannot be completed due to violations", "timestamp": "2024-04-25T12:10:20Z", "concept": "MediaAsset", "id": "6111521000", "errors": [ { "errorCode": "CORE-00011", "description": "$_Unprocessable ressource", "data": [ "The call contains multiple references to the same Parental rating identified with Drugs" ] } ] }
-
-
value:
The value of the content warning. Depending on the type, this will be text, true/false or an array of drop-down values. If the wrong input is given for a certain type, an error message is returned. For example:{ "statusCode": "422", "message": "Operation cannot be completed due to violations", "timestamp": "2024-04-25T12:18:35Z", "concept": "MediaAsset", "id": "6111521000", "errors": [ { "errorCode": "CORE-00002", "description": "BOOLEAN: only true or false allowed", "data": [ "Usage" ] } ] } -
comment:
A comment on the content warning.
If the content or media asset already had content warnings and the contentWarnings array is included in the body, the existing list will be removed and replaced by the new one provided as part of the call. Content warnings can be deleted by not including them in the contentWarnings array anymore or by clearing their value.
An example of the PUT /mediaAssets/{mediaAssetId} body:
"contentId": "143048527",
"contentTitle": "AVENGERS: ENDGAME",
"ratings": [
{
"regulator": "localRegulator",
"rating": "6",
"reason": null,
"status": null,
"contentWarnings": [
{
"id": "Violence",
"value": true,
"comment": "Verified"
},
{
"id": "Sensitive categories",
"value": [
"Fear"
],
"comment": null
},
{
"id": "Language",
"value": "Harsh",
"comment": null
}
]
}
],
When a content warning is included that is not configured for the defined regulator, the following error is returned:
{
"statusCode": "422",
"message": "Operation cannot be completed due to violations",
"timestamp": "2024-04-25T12:34:00Z",
"concept": "MediaAsset",
"id": "6111521000",
"errors": [
{
"errorCode": "MAM-00046",
"description": "$_The content warnings with id Violence was not found for regulator csaRegulator",
"data": [
"Violence",
"csaRegulator"
]
}
]
}
The YAMLs have been updated for these changes. The latest versions can be retrieved by using the GET /api calls of the content and MAM API.
API developers
The following was changed in the YAML of the
-
content API:
At line 918, the reference to the $ref: '#/components/schemas/ProgramVersion' was replaced by $ref: '#/components/schemas/EpisodeVersion'. At line 2410, the dvdReleaseDate and dvdReleaseDateForeign properties were added to the Content schema. RN-6303 At line 2606, the dvdReleaseDate and dvdReleaseDateForeign properties were added to the ContentForGet schema. RN-6303 At line 2982, the contentWarnings property with 3 reference schemas was added to the Rating schema The PressSheetCreateOrUpdateSuccess schema was removed.
-
MAM API:
At line 2495, the contentWarnings property with 3 reference schemas was added to the Rating schema.
Changes to filter parameters in GET /mediaAssets call in MAM API
In the MAM API, it is possible to use the GET /mediaAssets call to search for media assets. Previously, the YAML of the MAM API listed the label, status, kind, sourceMediaAssetId and mediaAssetSequenceId as possible filters for sorting the results.
However, when using the mediaAssetSequenceId as sort parameter in the URL, for example mediaAssets?filter=eq(label, 2311305000)&sort=mediaAssetSequenceId, the following error message would be returned:
{
"statusCode": "400",
"message": "Invalid sort parameter",
"timestamp": "2023-03-28T11:38:37Z"
}Additionally, when using the sourceMediaAssetId to sort, the response was sorted based on the media asset label, which was incorrect.
To correct this, from this version, the sourceMediaAssetId and mediaAssetSequenceId sort parameters have been removed from the MAM API. Instead, the mediaAssetId parameter has been added to sort the results based on the external reference of the media assets.
For example: /mediaAssets?filter=eq(channel, MGX)&sort=mediaAssetId
The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.
API developers
The following was changed in the YAML:
get > summary: Search for media assets > parameters > name: sort At line 306, the sourceMediaAssetId and mediaAssetSequenceId were removed and replaced by mediaAssetId. The description at line 311 was also updated.
For easier viewing, the YAMLs can also be compared here: TextCompare
More attributes in GET /mediaAssets calls in MAM BAPI
In the MAM API, when
searching for media assets using the
GET /mediaAssetscall,retrieving the details of one media asset using the
GET /mediaAssets/{mediaAssetId}call,
the contentId is returned but it is not clear which type the content has unless you use the GET /products/{contentId} call of the content API.
From this version, the contentType attribute has been added to the response of these calls. It returns the API reference of the value in the PSIProductType drop-down list for the content type.
An example of the GET /mediaAssets/{mediaAssetId} call:
{
"mediaAssetId": "3405437000",
"mediaAssetSequenceId": "3405438000",
"label": "0000000688",
"mediaAssetLabel": "0000000688",
"frameRate": "25fps",
"status": null,
"preferred": false,
"intention": null,
"kind": "ANTENNE",
...
"contentId": "1401676527",
"contentTitle": "I Used to Be Normal",
...
"contentType": "program",
...
}Additionally, as seen in the example, the following attributes have been added to the GET /mediaAssets/{mediaAssetId} call:
frameRatelabel: the Identification of the media assetmediaAssetLabel: the Label of the media asset
The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.
API developers
The following was changed in the YAML:
At line 2363, the frameRate, label and mediaAssetLabel properties were added to the FullMediaAssetForGet schema. At line 2636, MamContent > properties, the contentType was added. At line 3275, MediaAssetSearchResult > properties, the contentType was added.
For easier viewing, the YAMLs can also be compared here: TextCompare
Changes for custom attribute drop-down lists in MAM API
In previous versions, custom attributes were added to the MAM API (RN-4567, RN-5251).
Usually, for custom attributes of the type Drop-down list or Drop-down list for multiselection, a GET /dropdown/customAttribute/{attributeName} call is added to the API to retrieve the possible values. The {attributeName} should then be replaced with the actual attribute name of the custom attribute in WHATS’ON Base. For example, GET /mam/v1/dropdown/customAttribute/payDepartment
However, for the MAM API, this call was present in the YAML but it could not be used as it was not implemented in the code.
From this version, this call has been removed from the YAML and is replaced by the GET /dropdown/concept/{conceptName}/customAttribute/{attributeName} call.
Since the MAM API contains calls for several concepts, the {conceptName} must replaced by the concept of the custom attribute. This is because different concepts can have custom attributes with the same name and otherwise, the API would not know which custom attribute to return. In WHATS’ON, the Concept API reference field has been added to the system default layout of the custom attribute navigator so the API can identify the concept.

The possible concept names are for the URL are:
mediaAssetmediaAssetPrototypemediaAssetSequencevideoComponentaudioComponentsubtitlingComponentcomponentPrototypeSetsegmentationProfile
The {attributeName} should still be replaced with the Attribute name of the custom attribute in WHATS’ON Base.
For example: /dropdown/concept/mediaAsset/customAttribute/transferService
When the call is sent, the values of the drop-down list linked to the custom attribute are returned. For example:
[
{
"id": "WeTransfer",
"name": "WeTransfer"
},
{
"id": "Google Drive",
"name": "Google Drive"
},
{
"id": "Dropbox",
"name": "Dropbox"
}
]The YAML has been updated for these changes. The latest version can be retrieved by using the GET /api call.
API developers
The following has changed in the YAML:
At line 2154, the path of /dropdown/customAttribute/{attributeName} has been replaced
by /dropdown/concept/{conceptName}/customAttribute/{attributeName}.
At line 2160, the conceptName has been added as parameter for this path.For easier viewing, the YAMLs can also be compared here: TextCompare
Fix for nulling video component ID in MAM API
Previously, when
a product had a media asset and video component,
the product, media asset and video component were linked to a transmission,
and a
PUT /completeMediaAssetscall was sent with the following body for the video components,
{
"mediaAssetId": "2311305000",
"videoComponents": [
{
"videoComponentId": "null"
}
]
} the BAPI service would crash. This was because sending this call would try to delete the video component, which is not allowed because it was linked to a transmission.
This issue has been fixed. In this case, the following error message is returned:
{
"statusCode": "422",
"message": "Operation cannot be completed due to violations",
"timestamp": "2024-04-23T12:22:49Z",
"concept": "MediaAsset",
"id": "2311305000",
"errors": [
{
"errorCode": "hotlink_00001",
"description": "Video component is in use and it cannot be removed",
"data": [
"Unable to delete Video component ( id: 2311307000) because it is used in Transmission event (Field: Video component)."
]
}
]
}2024r3
Constraint for correct number of hard break markers
On the Markers tab of a media asset in WHATS'ON Base, it is possible to select the Keep hard break markers in sync check box. When this is selected and the TC in and TC out of a media asset are entered, markers with the Media asset type are automatically created. Their time codes will be read-only as they are synced from the TC in and out. It is not possible to create markers with this type manually.
When the check box is cleared, media asset markers would not be created when entering the TC in and out and they could also not be created manually.
Previously, however, using integrations such as the MAM API, it was possible to create media asset markers when the Keep hard break markers in sync check box was not selected. It was also possible to have only one media asset marker.
From this version, because of the introduction of the Hive video assistant, a constraint was added to prevent these inconsistencies.
When the Keep hard break markers in sync check box is
selected, it is checked that there are two media asset markers.
cleared, it is checked that there are no media asset markers.
If not, problem 6071 is shown and you cannot save until the situation is resolved.

The same will happen in the MAM API when a PUT or POST /mediaAssets call is sent that does not match the conditions above, such as one with only one media asset marker.
In this case, the following error is returned:
{
"statusCode": "422",
"message": "Operation cannot be completed due to violations",
"timestamp": "2024-04-09T15:24:09Z",
"concept": "MediaAsset",
"id": "3405437000",
"errors": [
{
"errorCode": "6071",
"description": "Wrong amount of media asset hard markers.",
"data": []
}
]
}Fix for unlinking media in /completeMediaAssets call of MAM API
Previously, when
using the
POST /completeMediaAssetscall to create a media asset with components linked to media; andusing the
PUTorPOST /completeMediaAssetscall to update the same media asset to be linked to new components and media,
the new components were linked correctly to the new media but the old media remained linked to the media asset. When the same action is done in WHATS'ON, meaning a different media is linked to the components, either the old media is unlinked from all components and the media asset or only the specific component.
This issue has been fixed. If all components are linked to different media using the API, the old media is also unlinked from the media asset.